package test;

import java.util.ArrayList;
import java.util.List;

/**
 * @author sunzhuokun
 * @date 14:33 2024/5/10
 * @description 字符串加密
 * 题目描述：给出原文字符串str，通过对字符串的每个字母进行改变来实现加密，加密方式是在每一个字母str[i]偏移特定数组元素a[i]的量。
 * 数组a的前三位已经赋值：a[0]=1,a[1]=2,a[2]=4,
 * 当i>=3时，数组元素a[i]=a[i-1]+a[i-2]+a[i-3]。例如：原文abcde加密后bdgkr，其中偏移量分别是1，2，4，7，13。
 * 输入描述：第一行是整数n，表示n组测试数据。每组数据包含一行，原文str(只含有小写字母，长度大于0小于50)。
 * 输出描述：每组测试数据输出一行，表示密文。
 */
public class StringEncryption_字符串加密 {

    public static void main(String[] args) {
        String str = "erskaadaaz";
        List<Integer> deviationList = new ArrayList<>();
        deviationList.add(1);
        deviationList.add(2);
        deviationList.add(4);

        StringBuilder result = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            char c = (char) (str.charAt(i) + getDeviation(deviationList, i));
            result.append((char) (c > (int) 'z' ? c % (int) 'z' + 96 : c));
        }
        System.out.println(result);
    }

    private static int getDeviation(List<Integer> deviationList, int i) {
        if (i < 3) {
            return deviationList.get(i);
        }
        int cur = deviationList.get(i - 1) + deviationList.get(i - 2) + deviationList.get(i - 3);
        deviationList.add(cur);
        return cur;
    }

}
